"""
继承的深入讨论/细节问题
1.子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接进行访问,但是私有属性和方法不能直接在子类直接访问
要通过父类提供的公共方法去访问
"""
#定义一个父类
class Base:
    #公共属性
    n1 = 100
    #私有属性
    __n2 = 200

    #构造方法
    def __init__(self):
        print("Base构造方法")

    #定义父类的公共方法
    def hi(self):
        print("hi()公共方法")

    #定义父类私有方法
    def __hello(self):
        print("__hello()私有方法")

    #提供公共方法,访问私有属性
    def test(self):
        print("属性:" , self.n1 , self.__n2)
        self.__hello()

#定义一个Sub子类,并且继承Base父类
class Sub(Base):
    #子类的构造器
    def __init__(self):
        print("Sub构造方法....")


    def say_ok(self):
        # 我们发现父类的非私有属性和方法可以访问
        print("say_ok()" , self.n1)
        self.hi()

        #我们发现父类的私有属性和方法不可以访问
        # self.__hello()
        # print(self.__n2)


#创建子类对象
# sub = Sub()
# sub.say_ok()
# sub.test()


#Python编程语言中,"object"是所有其他类的基类
#Python支持多层继承
class A:
    n1 = 100
    def sing(self):
        print("A sing()..." , self.n1)

    def biancheng(self):
        print("我喜欢的是c++编程")

class B:
    n2 = 200
    def dance(self):
        print("B dance()..." , self.n2)

    def biancheng(self):
        print("我喜欢的是c语言编程")

class C(A , B):
    #Python pass 是空语句,是为了保持程序结构的完整性
    #pass 不做任何事情， 一般用作占位语句
    pass


c = C()
print("--------------------")
#调用继承的方法
print(f"属性信息{c.n1} , {c.n2}")
#使用方法
c.dance()
c.sing()

#在多重继承中,如果有同名的成员,遵守从左到右的继承优先级(即写在左边的优先级高，写在右边的父类优先级低)
c.biancheng()
